Skip to main content

TypeScript_ keyof 關鍵字

keyof 是 TypeScript 中的一種索引類型查詢操作符,用於獲取某種類型的所有鍵的聯合類型。例如,如果我們有一個介面:

interface Person {
name: string;
age: number;
gender: string;
}

那麼 keyof Person 的結果將是 'name' | 'age' | 'gender' 這種類型。

如何使用 keyof

type PersonKeys = keyof Person;

在這裡,PersonKeys 將是 'name' | 'age' | 'gender' 這種類型。

我們也可以使用 keyof 來訪問對象的屬性:

function getProperty<T, K extends keyof T>(obj: T, key: K): T[K] {
return obj[key];
}

let person: Person = {name: 'John', age: 30, gender: 'male'};
let personName: string = getProperty(person, 'name'); // John

在這個例子中,getProperty 函數接收一個泛型類型 T 和該類型的一個鍵 K,並返回該鍵對應的值。

keyof 在索引簽名中的使用

在下面的例子中,我們利用了 keyof 的特性在函數 transformRoutes 中遍歷輸入數據的每個屬性:

type InputData = {
[key: string]: Routes;
};

function transformRoutes(inputData: InputData): (string | string)[][] {
const result: (string | string)[][] = [];

for (let key in inputData) {
const routeData = inputData[key];

// Process routeData...
}

return result;
}

在上述例子中,我們使用 for...in 循環和 keyof 關鍵字遍歷輸入數據的每個屬性,然後對每個屬性執行一些操作。